#ifndef _I_WINDOWS_INFORMATION_GROUP_H_
#define _I_WINDOWS_INFORMATION_GROUP_H_

#include "../common/I_Object.h"

enum Windows_Edition
{
	WINDOWS_UNKNOW = 0,
	WINDOWS_CE,
	WINDOWS_95,
	WINDOWS_98,
	WINDOWS_ME,
	WINDOWS_NT,
	WINDOWS_2000,
	WINDOWS_XP,
	WINDOWS_2003,
	WINDOWS_VISTA,
	WINDOWS_2008,
	WINDOWS_7,
};

enum Path_Token {
	WINDOWS_DIR = 0,	// windows directory eg. /mnt/sda1/WINDOWS
	SYSTEM_DIR,			// system directory eg. /mnt/sda1/WINDOWS/system32
	HOME_DIR,			// user home directory eg. /mnt/sda1/documents and settings
	WINDOWS_ROOT,		// windows root directory eg. /mnt/sda1
	WINDOWS_TEMP,		// windows temp directory eg. /mnt/sda1/WINDOWS/temp
	PROGRAM_FILES,		// windows temp directory eg. /mnt/sda1/Program Files
	COMMON_USER,		// windows temp directory eg. /mnt/sda1/documents and settings/All Users
	CURRENT_USER,		// windows temp directory eg. /mnt/sda1/documents and settings/Administrator
	SET_PATH_FROM_WINDOWS_DIR, // try to set all directories by windows directory
};

class Windows_Information;

class I_Windows_Manager : public I_Object
{
public:
	virtual int get_windows_total() = 0;
	virtual const char * get_directory(int wid, Path_Token token) = 0;
	virtual Windows_Edition get_windows_version(int wid) = 0;
	virtual int get_windows_users_total(int wid) = 0;
	virtual const char * get_partition_in_string(int wid) = 0;
	virtual int	get_windows_version_and_build_number(int wid,
	int & major_ver, int & minor_ver, int & build_num) = 0;
	virtual const Windows_Information * get_windows_information(int wid) const = 0;
	virtual const Windows_Information * get_windows_information(const char * win_root) const = 0;
	virtual void * local_dynamic_cast(const char * type) = 0;
	virtual void	delete_self() = 0;
};

extern "C"
I_Windows_Manager * ctreate_windows_manager();

#endif
